Double-buffering systems are used to provide atomic or at-once update of a set of output data. They are employed in applications in which it is undesirable to present a partially-updated set of output data. One such application is displays such as for personal computers, in which presentation of a partially-updated frame causes the visually undesirable result of “tearing” in which, for a brief time, part of a prior frame is displayed simultaneously with part of a next frame.
FIG. 1 shows an ordinary graphics system 10 which uses double-buffering to avoid such undesirable effects. A raster graphics engine provides pixel data to a first buffer (“buffer A”) or “back buffer”. Upon completion of a frame, control logic transfers the completed frame to a second buffer (“buffer B”) or “front buffer”, which drives a raster display device, such as a cathode ray tube (CRT) display. While that is happening, the graphics engine starts building the next frame in the first buffer. In alternative systems, the two buffers operate in “ping-pong” fashion rather than “back-front” fashion.
FIG. 2 shows a spatial light modulator (SLM) 20, which is a special case of display. SLMs are used to inject graphical or video content into a light beam. They can be reflective or transmissive. An SLM can be simplistically envisioned as an X by Y grid or array of pixel elements or cells 22, each of which controls the amount of light reflected or transmitted through its geographic region of the SLM. The array is controlled by control logic 24, and its output may be directed to a display 26 or used otherwise.
Each pixel element typically consists of an analog device such as a liquid crystal cell which responds to a voltage or current applied to its electrode. Commonly, there may be plural subsets of pixel elements each dedicated to a distinct color space, such as red, green, and blue pixel elements in an RGB display. Each pixel element is typically driven according to a multi-bit pixel color value stored in a storage location uniquely associated with that pixel element.
In conventional display and SLM systems, the entire image is regenerated each new frame. This might be termed “complete refresh”. In the future, displays may use “sparse refresh”, in which only changed portions of the image are generated for a new frame.
Traditional back-front or ping-pong double-buffering does not work in sparse refresh systems, because in the known double-buffering systems, one of the buffers (the back buffer, or the ping-pong buffer not presently driving the display) are completely regenerated (meaning all of its locations will be rewritten) before being committed to the display. If used with a conventional double-buffering system, sparse refresh would leave neither buffer holding a complete and current image. What is needed, then, is a double-buffering system which allows sparse refresh without tearing and so forth.